package com.f21.f21assessoria.service;

import java.util.Calendar;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.f21.f21assessoria.dao.CrudDao;
import com.f21.f21assessoria.dao.TurmaDao;
import com.f21.f21assessoria.model.cadastro.Usuario;
import com.f21.f21assessoria.model.modalidade.Modalidade;
import com.f21.f21assessoria.model.modalidade.Turma;
import com.f21.f21assessoria.model.modalidade.TurmaAluno;
import com.f21.f21assessoria.model.modalidade.TurmaProf;

@Service
public class TurmaServiceImp extends CrudServImp<Turma> implements TurmaService {

	@Autowired
	private TurmaDao turmaDao;

	public TurmaDao getTurmaDao() {
		return turmaDao;
	}

	public void setTurmaDao(TurmaDao turmaDao) {
		this.turmaDao = turmaDao;
	}

	public List<Usuario> listaAlunos(Turma turma) {
		return turmaDao.listaAlunos(turma);
	}

	public List<Usuario> listaProfessores(Turma turma) {
		return turmaDao.listaProfessores(turma);
	}

	public List<Turma> listarTodos() {
		return getDAO().listarTodos();
	}

	public List<Turma> listarTodos(String classe) {
		return getDAO().listarTodos(classe);
	}

	public void addAluno(Usuario user, Turma turma) {
		addAluno(user, turma, Calendar.getInstance().getTime());
	}

	public void addAluno(Usuario user, Turma turma, Date data) {
		TurmaAluno ta = new TurmaAluno();
		ta.setAluno(user);
		ta.setTurma(turma);
		ta.setData(data);
		turma.getListaAlunos().add(ta);
	}

	public void addProfessor(Usuario user, Turma turma) {
		TurmaProf turmaProf = new TurmaProf();
		turmaProf.setProfessor(user);
		turmaProf.setTurma(turma);
		if(!turma.getListaProfs().contains(turmaProf))
			turma.getListaProfs().add(turmaProf);
	}

	@Override
	public CrudDao<Turma> getDAO() {
		return turmaDao;
	}

	public void salvarModalidade(Modalidade modalidade) {
		turmaDao.salvarModadilade(modalidade);
	}

	public void excluirModalidade(Modalidade modalidade) {
		turmaDao.excluirModalidade(modalidade);
	}

	public void addAluno(List<Usuario> alunos, Turma turma) {
		for (Usuario aluno : alunos) {
			addAluno(aluno, turma);
		}

	}

	public void addProfessor(List<Usuario> profs, Turma turma) {
		for (Usuario prof : profs) {
			addProfessor(prof, turma);
		}

	}
	
	public void removerTurma(Modalidade modalidade, Turma turma){
		modalidade.getTurmas().remove(turma);
	}

	public Set<Usuario> getListaProfs(Turma turma) {
		HashSet<Usuario> hashSet = new HashSet<Usuario>();

		for (TurmaProf turmaprof : turma.getListaProfs()) {
			hashSet.add(turmaprof.getProfessor());
		}

		return hashSet;
	}

	public List<Modalidade> listaModalidades() {
		
		return turmaDao.listaModalidades();
	}

}
